"use strict";

const Controller = require("egg").Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = "hi, egg";
    }

    /**
     * 登录
     */
    async login() {
        // 获取请求体参数
        const { mobile, code } = this.ctx.request.body;
        // 是否存在该验证码
        const res = await this.service.code.findByMobile(mobile);
        // 不存在该手机号对应的验证码
        if (!res) {
            this.ctx.body = {
                code: 404,
                message: "请先获取验证码",
            };
            return;
        }
        // 验证验证码的有效性(10 分钟)
        const expired = res.create_time + 600000;
        if (Date.now() > expired) {
            this.ctx.body = {
                code: 400,
                message: "验证码已过期，请重新获取",
            };
            return;
        }
        // 检查验证码是否正确
        if (res.code !== code) {
            this.ctx.body = {
                code: 400,
                message: "验证码不正确",
            };
            return;
        }
        // 删除这个手机号对应的验证码
        await this.service.code.remove(mobile);
        // 去用户表里，找到这个用户，给它生成唯一身份令牌，返给前端
        const user = await this.service.user.findByMobile(mobile);
        // 没有手机号对应的用户
        if (!user) {
            this.ctx.body = {
                code: 404,
                message: "用户未录入，不能登录",
            };
            return;
        }
        // 获取用户对应的前端权限菜单
        const menus = await this.service.acl.readListMenuByRid(user.rid);
        // 有这个用户
        const token = this.ctx.helper.genToken({ ...user });
        // 返回响应
        this.ctx.body = {
            code: 200,
            data: {
                user,
                token,
                menus,
            },
            message: "登录成功",
        };
    }
}

module.exports = HomeController;
